package com.itany.corejava.code08_常用类.包装类;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月14日 11:41
 */
public class Test02_装箱与拆箱 {
    public static void main(String[] args) {
        // 装箱: 将基本数据类型转换成包装类
        // 拆箱: 将包装类转换成基本数据类型
        int i=1;
        //装箱(手动装箱)
        Integer integer=new Integer(i);

        // JDK5之后自动装箱
        Integer integer2=i;

        Integer integer22=i;
        System.out.println("=====+++++");
        System.out.println(integer2==integer22);

        // 拆箱(手动拆箱)
        int i2=integer.intValue();
        System.out.println(i2);
        // JDK5之后自动拆箱
        int i3=integer2;

        int i4=9;
        int i5=9;
        System.out.println(i4==i5);//true

        System.out.println("======");
        Integer integer3=new Integer(9);
        Integer integer4=new Integer(9);
        System.out.println(integer3==integer4);

        //在进行比较时候发生了自动拆箱的操作
        // 当int类型与Integer类型的值进行比较时候
        // 会自动将Integer拆箱为int类型
        // 因此比较两个int类型值的大小
        System.out.println(i4==integer3);

        // 直接定义数字默认是int类型
        // 但是由于int不是Object子类，会自动进行装箱的操作，将int转换为Integer
        // 此时属于父类的引用指向了子类，多态
        // 装箱+多态
        Object obj=10;
        int a=10;
        show(a);

        Integer b=100;
        show((Integer) obj);
        show(b);

    }

    public static void show(int i){
        System.out.println("调用了int");
    }
    public static void show(Integer i){
        System.out.println("调用了Integer");
    }
}
